import common from "./BQGIS-modelTool"
/**
 * 模型种植
 * @param    viewer  Mars3d实例对象
 * @returns 
 */
export function initBQGIS_model(viewer = window.viewer){
    return new BQGIS_model(viewer)
}
export function BQGIS_model(viewer = window.viewer){
    this.viewer = viewer
    // 创建矢量数据图层
    this.graphicLayer = new mars3d.layer.GraphicLayer()
    this.viewer.addLayer(this.graphicLayer)
    this.common = new common()
}
/**
 * 模型添加
 * @param  url                  模型地址
 * @param  name                 名称（可不传入）
 * @param  position             经纬度位置 [lna lat high]
 * @param  isSave               是否保存到数据库
 * @param  id                   id（可不传入）
 * @param  scale                比例大小（可不传入）
 * @param  heading              翻滚角（可不传入）
 * @param  pitch                俯仰角（可不传入）
 * @param  roll                 滚转角（可不传入）
 * @param  minimumPixelSize     模型最小限制（可不传入）（默认0）
 * @param  maximumScale         模型最大限制（可不传入）（默认20000）
 * @param  color                模型颜色（可不传入）
 * @param  opacity              模型透明度（可不传入）（范围 0-1 默认1）
 * @param  silhouette           是否显示边框 （可不传入）
 * @param  silhouetteColor      边框颜色（可不传入）
 * @param  silhouetteSize       边框大小（可不传入）
 * @param  colorBlendMode       颜色混合模型（可不传入）
 * @param  colorBlendAmount     颜色强度（可不传入）
 * @param  heightReference      地形位置（可不传入）
 */
BQGIS_model.prototype.addModel=function(option = {}){
    let param= Object.assign({
        url:'',//模型地址
        name:'',//名称
        id:this.common.guid(),//id
        scale:1,//比例
        heading:0,//方向角
        pitch:0,//俯仰角
        roll:0,//翻滚角
        minimumPixelSize:0,//最小大小
        maximumScale:2000,//最大大小
        color:'#ffffff',//颜色
        opacity:1.0,//透明度
        silhouette:false,//轮廓
        silhouetteColor:'',//轮廓颜色
        silhouetteSize:2,//轮廓大小
        colorBlendMode:'HIGHLIGHT',//颜色混合
        colorBlendAmount:0.5,//颜色强度
        heightReference:"NONE",//地形位置
        isSave:false,//是否保存到数据库
        position:[],//位置
    },option)
    let graphic = new mars3d.graphic.ModelEntity({
        id:param.id,
        name:param.name,
        position:param.position,
        style:{
            url:param.url,
            scale:param.scale,
            heading:param.heading,
            pitch:param.pitch,
            roll:param.roll,
            minimumPixelSize:param.minimumPixelSize,
            maximumScale:param.maximumScale,
            color:param.color,
            opacity:param.opacity,
            silhouette:param.silhouette,
            silhouetteColor:param.silhouetteColor,
            silhouetteSize:param.silhouetteSize,
            colorBlendMode:this.switchColorBlendMode(param.colorBlendMode),
            colorBlendAmount:param.colorBlendAmount,
            heightReference:this.common.switchHeightReference(param.heightReference),
            position:param.position
        }
    })
    this.graphicLayer.addGraphic(graphic)
    if(param.isSave){
        //param.position=[graphic.point.lng,graphic.point.lat,graphic.point.alt]//this.common.getLngLat(graphic.position.getValue())
        this.common.saveSymbolAttribute({id:param.id, type:'model',typeName:'模型',attribute:JSON.stringify(param)},true)
    }
    return param.id
}
/**
 * 模型更新
 * @param  url                  模型地址（可不传入）
 * @param  name                 名称（可不传入）
 * @param  isSave               是否保存到数据库
 * @param  id                   id
 * @param  scale                比例大小（可不传入）
 * @param  heading              翻滚角（可不传入）
 * @param  pitch                俯仰角（可不传入）
 * @param  roll                 滚转角（可不传入）
 * @param  minimumPixelSize     模型最小限制（可不传入）（默认0）
 * @param  maximumScale         模型最大限制（可不传入）（默认20000）
 * @param  color                模型颜色（可不传入）
 * @param  opacity              模型透明度（可不传入）（范围 0-1 默认1）
 * @param  silhouette           是否显示边框 （可不传入）
 * @param  silhouetteColor      边框颜色（可不传入）
 * @param  silhouetteSize       边框大小（可不传入）
 * @param  colorBlendMode       颜色混合模型（可不传入）
 * @param  colorBlendAmount     颜色强度（可不传入）
 * @param  heightReference      地形位置（可不传入）
 */
BQGIS_model.prototype.updateModel=function(option={}){
    let data= this.graphicLayer.getGraphicById(option.id)
    if(data){
        data.setStyle(option)
        if(option.isSave){
            this.common.saveSymbolAttribute({id:data.id, type:'model',typeName:'模型',attribute:JSON.stringify(data.style)},false)
        }
    }
}
/**
 * 根据模型id移除模型
 * @param  id  模型id
 */ 
BQGIS_model.prototype.removeModel=function(id){
    let data= this.graphicLayer.getGraphicById(id)
    if(data){
        this.graphicLayer.removeGraphic(data)
    }
}
/**
 * 清除所有模型
 */
BQGIS_model.prototype.clearAllModel=function(){
    this.graphicLayer.clear()
}
/**
 * 模型添加
 * @param  url                  模型地址
 * @param  name                 名称（可不传入）
 * @param  isSave               是否保存到数据库
 * @param  id                   id（可不传入）
 * @param  scale                比例大小（可不传入）
 * @param  heading              翻滚角（可不传入）
 * @param  pitch                俯仰角（可不传入）
 * @param  roll                 滚转角（可不传入）
 * @param  minimumPixelSize     模型最小限制（可不传入）（默认0）
 * @param  maximumScale         模型最大限制（可不传入）（默认20000）
 * @param  color                模型颜色（可不传入）
 * @param  opacity              模型透明度（可不传入）（范围 0-1 默认1）
 * @param  silhouette           是否显示边框 （可不传入）
 * @param  silhouetteColor      边框颜色（可不传入）
 * @param  silhouetteSize       边框大小（可不传入）
 * @param  colorBlendMode       颜色混合模型（可不传入）
 * @param  colorBlendAmount     颜色强度（可不传入）
 * @param  heightReference      地形位置（可不传入）
 */
BQGIS_model.prototype.draw=function(option = {}){
    let param= Object.assign({
        url:'',//模型地址
        name:'模型',//名称
        id:this.common.guid(),//id
        scale:1,//比例
        heading:0,//方向角
        pitch:0,//俯仰角
        roll:0,//翻滚角
        minimumPixelSize:0,//最小大小
        maximumScale:2000,//最大大小
        color:'#ffffff',//颜色
        opacity:1.0,//透明度
        silhouette:false,//轮廓
        silhouetteColor:'',//轮廓颜色
        silhouetteSize:2,//轮廓大小
        colorBlendMode:'HIGHLIGHT',//颜色混合
        colorBlendAmount:0.5,//颜色强度
        heightReference:"NONE",//地形位置
        isSave:false,//是否保存到数据库
    },option)
    this.graphicLayer.startDraw({
        type:'model',
        name:param.name,
        id:param.id,
        style:{  
            url:param.url,
            name:param.name,
            id:param.id,
            scale:param.scale,
            heading:param.heading,
            pitch:param.pitch,
            roll:param.roll,
            minimumPixelSize:param.minimumPixelSize,
            maximumScale:param.maximumScale,
            color:param.color,
            opacity:param.opacity,
            silhouette:param.silhouette,
            silhouetteColor:param.silhouetteColor,
            silhouetteSize:param.silhouetteSize,
            colorBlendMode:this.switchColorBlendMode(param.colorBlendMode),
            colorBlendAmount:param.colorBlendAmount,
            heightReference:this.common.switchHeightReference(param.heightReference),
        },
        success:graphic=>{
            if(param.isSave){
                param.position=[graphic.point.lng,graphic.point.lat,graphic.point.alt]///this.common.getLngLat(graphic.point)
                this.common.saveSymbolAttribute({id:param.id, type:'model',typeName:'模型',attribute:JSON.stringify(param)},true)
            }           

        }
    })
    return param.id

}
BQGIS_model.prototype.colorBlendModeOptions= [
    { value: "HIGHLIGHT", label: "将源颜色乘以目标颜色" },
    { value: "REPLACE", label: "将源颜色替换为目标颜色" },
    { value: "MIX", label: "将源颜色和目标颜色混合在一起" }
]
BQGIS_model.prototype.heightReferenceOptions=function(){
    return this.common.seat
} 
BQGIS_model.prototype.switchColorBlendMode=function(colorBlendMode) {
    let res = Cesium.ColorBlendMode.HIGHLIGHT;
    switch (colorBlendMode) {
      case "HIGHLIGHT":
        res = Cesium.ColorBlendMode.HIGHLIGHT;
        break;
      case "REPLACE":
        res = Cesium.ColorBlendMode.REPLACE;
        break;
      case "MIX":
        res = Cesium.ColorBlendMode.MIX;
        break;
      default:
        break;
    }
    return res;
}


